import axios from 'axios';
import { ElMessage } from 'element-plus';
import { getCookie, extendCookie } from '@/utils/cookie.js';
import { useUserStore } from '@/pinia/user.js';
// const piniaUser = useUserStore();
// import wrapAxiosInstance from 'traceservice-instrumentation-axios'
// let piniaUser = null; // 延迟初始化
// const getPiniaUser = () => {
//   if (!piniaUser) {
//     piniaUser = useUserStore(); // 在首次调用时初始化
//   }
//   return piniaUser;
// };
let usemock = false;
const http = axios.create({
  timeout: 20000,
  withCredentials: true,
  // headers: { 'X-Requested-With': 'XMLHttpRequest', 'token': '', user: piniaUser.user.memberId || '' },
  headers: {
    'X-Requested-With': 'XMLHttpRequest',
    // Authorization: getPiniaUser().authToken ? getPiniaUser().authToken : localStorage.getItem('Token'),
  },
});

// 用于上报前端调用链信息, 不会影响正常开发流程
// http://iris.hikvision.com.cn/conch/traceservice-instrumentation-axios
// wrapAxiosInstance(http, { serviceName: process.env.VUE_APP_CONTEXT })

// 相应拦截器
http.interceptors.response.use(
  function (response) {
    // 请求多语言的json文件
    if (/.*\.json$/.test(response.config.url)) {
      return response;
    }

    // 根据响应数据判断是否登录过期
    // if (response.data.errorCode === REFRESH_BY_HEADER) {
    //   let refreshUrl = response.headers['refresh-url'].split('?')[0]
    //   refreshUrl =
    //     refreshUrl +
    //     '?service=' +
    //     location.protocol +
    //     '//' +
    //     location.host +
    //     location.pathname +
    //     encodeURIComponent(location.search)
    //   location.href = refreshUrl
    //   return
    // }

    // 对错误进行统一处理
    if (response.data.errorCode !== '0') {
      if (!response.config.noMsg && response.data.message) {
        ElMessage.error(response.data.message);
      }
      return Promise.reject(response);
    } else if (
      response.data.errorCode === '0' &&
      response.config.successNotify &&
      response.data.message
    ) {
      // 弹出成功提示
      ElMessage.success(response.data.message);
    }
    return Promise.resolve({
      code: response.data.errorCode,
      message: response.data.message,
      data: response.data.data,
    });
  },
  function (error) {
    ElMessage.error(error.message);
    return Promise.reject(error);
  }
);

// 请求拦截器
http.interceptors.request.use(
  function (config) {
    // const piniaUser = useUserStore();
    // console.log(piniaUser.acount)
    // console.log('入参Request Data:', config.data);
    if (config.method === 'post' && config.data) {
      // config.data.assignMemberId = piniaUser.user.memberId
      // config.data.role = piniaUser.user.role
    }
    // 所有搜索框可输入元素，都不需要去掉前后空格，只有仅输入空格时，此字段搜索无效。(规范: http://iris.hikvision.com.cn/huidesign/bscs/issues/83)
    if (process.env.NODE_ENV == 'development') {
      if (usemock) {
        config.url = `/mock-web${config.url}`;
      }
      config.headers.Authorization = localStorage.getItem('Token');
      // config.headers.authorization = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIyIiwiZXhwIjoxNzQ1OTc5NTg2LCJzdWIiOiJzdGFmZjIiLCJpYXQiOjE3NDUzNzQ3ODZ9.AhP_9qLr68C5L_431XZTJ84kAivEaQREujBr-aw1by0';
      return config;
    }
    // 判断请求方法是 POST，并且数据存在
    // if (config.method === 'post' && config.data) {
    //   // 遍历请求的参数，删除空字符串的属性
    //   for (let key in config.data) {
    //     if (config.data[key] === '') {
    //       delete config.data[key];  // 删除空字符串参数
    //     }
    //   }
    //   config.data.assignMemberId = piniaUser.user.memberId
    // }
    config.headers.Authorization = localStorage.getItem('Token');
    return config;
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

export default http;
